home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / Arashi 1.1 / Game Source / jam src / STResource.c < prev    next >
C/C++ Source or Header  |  1993-03-15  |  11KB  |  358 lines

  1. /*/
  2.      Project Arashi: STResource.c
  3.      Major release: Version 1.1, 7/22/92
  4.  
  5.      Last modification: Monday, March 15, 1993, 21:33
  6.      Created: Sunday, March 3, 1991, 7:43
  7.  
  8.      Copyright © 1991-1993, Juri Munkki
  9. /*/
  10.  
  11.  
  12. #include "STORM.h"
  13. #include "EditorTypes.h"
  14. #include "Parser.h"
  15. #include "InternalVars.h"
  16. #include <VA.h>
  17. #include "heroflags.h"
  18.  
  19. #define RANDOMLEVELS 224        /* start of random levels */
  20. #define STARTGREEN 208
  21.  
  22. extern    Player    Hero;
  23.  
  24. void    STOldLoadLevel()
  25. {
  26.     register    int                    i;
  27.     register    EditorLevelType        *edp,**edh;
  28.                 int                    randGreenLevel;
  29.     static        int                    highLvNum;
  30.     
  31.     /*    ThisLevel.lvType = 2;    */
  32.     
  33.     /* Check to see if last green level completed. If so go random. (mz)         */
  34.     /* The lvNext in LEVL 223 (level 96) points to a non-existant LEVL 224.     */
  35.     /* Flag for that, and go into random levels.                                */
  36.     
  37.     if (ThisLevel.lvNext == RANDOMLEVELS)
  38.     {
  39.         ThisLevel.lvType = 4;
  40.         highLvNum = 97;
  41.     }
  42.         
  43.     /* Only cases 0,3,4 are currently used.  The other cases are for other         */
  44.     /* possible level RSRC's which were never implemented.                        */
  45.     
  46.     switch(ThisLevel.lvType)
  47.     {    case 0:
  48.             ThisLevel= **(LevelInfo **)GetResource('LEVL',ThisLevel.lvNext);
  49.             break;
  50.         case 1:
  51.             ThisLevel.lvField=        ThisLevel.lvNumber % 16 + 100;
  52.             ThisLevel.lvNumber++;
  53.             ThisLevel.lvColor=        1000;
  54.             ThisLevel.lvBonus=        0;
  55.             ThisLevel.lvNext=        0;
  56.     
  57.             ThisLevel.plMaxMove=    12;
  58.             ThisLevel.plSuperZaps=    1;
  59.             
  60.             ThisLevel.shSpeed=        4;
  61.             ThisLevel.shPower=        2;
  62.             ThisLevel.shColor[0]=    1;
  63.             ThisLevel.shColor[1]=    0;
  64.             ThisLevel.shColor[2]=    6;
  65.             ThisLevel.shColor[3]=    4;
  66.             ThisLevel.shColor[4]=    5;
  67.             
  68.             ThisLevel.flPoints=        10;
  69.             ThisLevel.flCount=        3;
  70.             ThisLevel.flProb=        700;
  71.             ThisLevel.flSpeed=        65536L;
  72.             ThisLevel.flRot=        4;
  73.             ThisLevel.flColor=        2;
  74.     
  75.             for(i=0;i<=TANKTYPES;i++)
  76.             {    ThisLevel.tk[i].points=    25;
  77.                 ThisLevel.tk[i].count=    2;
  78.                 ThisLevel.tk[i].prob=    600;
  79.                 ThisLevel.tk[i].speed=    65536L;
  80.                 ThisLevel.tk[i].color=    4+i;
  81.             }
  82.             
  83.             ThisLevel.fuPoints=        25;
  84.             ThisLevel.fuBullseye=    100;
  85.             ThisLevel.fuCount=        1;
  86.             ThisLevel.fuProb=        600;
  87.             ThisLevel.fuWarpP=        2;
  88.             ThisLevel.fuPlayerPlus=    40;
  89.             ThisLevel.fuColor[0]=    0;
  90.             ThisLevel.fuColor[1]=    5;
  91.             ThisLevel.fuColor[2]=    1;
  92.             ThisLevel.fuColor[3]=    4;
  93.             ThisLevel.fuColor[4]=    2;
  94.             
  95.             ThisLevel.puPoints=        50;
  96.             ThisLevel.puCount=        3;
  97.             ThisLevel.puProb=        600;
  98.             ThisLevel.puSpeed=        32768L;
  99.             ThisLevel.puRot=        5;
  100.             ThisLevel.puColor=        5;
  101.             ThisLevel.puTime=        20;
  102.             ThisLevel.puPulsDepth=    DEPTH-DEPTH/5;
  103.             
  104.             ThisLevel.spPoints=        50;
  105.             ThisLevel.spProb=        100;
  106.             ThisLevel.spSpeed=        65536L;
  107.             ThisLevel.spStart=        DEPTH;
  108.             ThisLevel.spTop=        10;
  109.             ThisLevel.spPlasma=        1;
  110.             ThisLevel.spPlSpeed=    5L*65536L;
  111.             ThisLevel.spPlPoints=    200;
  112.             ThisLevel.spSpikePoints=1;
  113.             ThisLevel.spColor[0]=    3;
  114.             ThisLevel.spColor[1]=    0;
  115.             ThisLevel.spColor[2]=    5;
  116.             
  117.             ThisLevel.boredomCount=    4;
  118.             ThisLevel.boredProb=    2000;
  119.             ThisLevel.endTimer=        60;
  120.             
  121.             break;
  122.         case 2:
  123.             edh = (void *) GetIndResource('LEVE',1);
  124.             HLock(edh);
  125.             edp = *edh;
  126.             
  127.             ThisLevel.lvField=        edp->fieldId;
  128.             ThisLevel.lvNumber++;
  129.             ThisLevel.lvColor=        1000 ;//edp->fieldColor;
  130.             ThisLevel.lvBonus=        edp->levelBonus;
  131.             ThisLevel.lvNext=        0;
  132.     
  133.             ThisLevel.plMaxMove=    edp->playerSpeed;
  134.             ThisLevel.plSuperZaps=    edp->playerSuperZapperCount;
  135.             
  136.             ThisLevel.shSpeed=        edp->playerShotSpeed / 10;
  137.             ThisLevel.shPower=        edp->spikeDurability;
  138.             for(i=0;i<6;i++)
  139.             {    ThisLevel.shColor[i] = edp->playerShotColors[i];
  140.             }
  141.             
  142.             ThisLevel.flPoints=        edp->flipperPoints;
  143.             ThisLevel.flCount=        edp->flipperCount;
  144.             ThisLevel.flProb=        edp->flipperFreq * 65536L / 1000;
  145.             ThisLevel.flSpeed=        edp->flipperSpeed * 65536L / 10;
  146.             ThisLevel.flRot=        edp->flipperRotSpeed;
  147.             ThisLevel.flColor=        edp->flipperColor;
  148.  
  149.             for(i=0;i<=TANKTYPES;i++)
  150.             {    ThisLevel.tk[i].points=    edp->tanks[i].points;
  151.                 ThisLevel.tk[i].count=    edp->tanks[i].count;
  152.                 ThisLevel.tk[i].prob=    edp->tanks[i].freq * 65536L / 1000;
  153.                 ThisLevel.tk[i].speed=    edp->tanks[i].speed * 65536L / 10;
  154.                 ThisLevel.tk[i].color=    edp->tanks[i].color;
  155.             }
  156.             
  157.             ThisLevel.fuPoints=        edp->fusePoints;
  158.             ThisLevel.fuBullseye=    edp->fuseBullsEyePoints;
  159.             ThisLevel.fuCount=        edp->fuseCount;
  160.             ThisLevel.fuProb=        edp->fuseFreq * 65536L / 1000;
  161.             ThisLevel.fuWarpP=        edp->fuseWarpProbability * 65536L / 1000;
  162.             ThisLevel.fuPlayerPlus=    40;
  163.             for(i=0;i<5;i++)
  164.             {
  165.                 ThisLevel.fuColor[0]=    edp->fuseColors[i];
  166.             }
  167.             
  168.             ThisLevel.puPoints=        edp->pulsarPoints;
  169.             ThisLevel.puCount=        edp->pulsarCount;
  170.             ThisLevel.puProb=        edp->pulsarFreq * 65536L / 1000;
  171.             ThisLevel.puSpeed=        edp->pulsarSpeed * 65536L / 10;
  172.             ThisLevel.puRot=        edp->pulsarRotSpeed;
  173.             ThisLevel.puColor=        edp->pulsarColor;
  174.             ThisLevel.puTime=        edp->pulsarPulseTime;
  175.             ThisLevel.puPulsDepth=    DEPTH-DEPTH/5;
  176.             
  177.             ThisLevel.spPoints=        edp->spikerPoints;
  178.             ThisLevel.spProb=        edp->spikerFreq * 65536L / 1000;
  179.             ThisLevel.spSpeed=        edp->spikerUpSpeed * 65536L / 10;
  180.             ThisLevel.spStart=        edp->spikeInitialLength/10;
  181.             ThisLevel.spTop=        edp->spikeMaxLength/10;
  182.             ThisLevel.spPlasma=        edp->spikerPlasmaFlags;
  183.             ThisLevel.spPlSpeed=    edp->spikerPlasmaSpeed;
  184.             ThisLevel.spPlPoints=    edp->spikerPlasmaPoints;
  185.             ThisLevel.spSpikePoints=edp->spikerPoints;
  186.             ThisLevel.spColor[0]=    edp->spikerPlasmaColors[0];
  187.             ThisLevel.spColor[1]=    edp->spikerPlasmaColors[1];
  188.             ThisLevel.spColor[2]=    edp->spikerPlasmaColors[2];
  189.             
  190.             ThisLevel.boredomCount=    4;
  191.             ThisLevel.boredProb=    2000;
  192.             ThisLevel.endTimer=        60;
  193.             
  194.             HUnlock(edh);
  195.             ReleaseResource(edh);
  196.             break;
  197.         case 3: /* case for death on doomsday levels, dont increment */
  198.         case 4: 
  199.             randGreenLevel = STARTGREEN + ((unsigned int)(Random()) % 16);
  200.             ThisLevel= **(LevelInfo **)GetResource('LEVL',randGreenLevel);
  201.             ThisLevel.lvNumber = highLvNum;
  202.             if (ThisLevel.lvType == 4)
  203.                 highLvNum++;
  204.             ThisLevel.lvType = 4;
  205.             break;
  206.             
  207.     }
  208.     
  209.     ThisLevel.totalCount=
  210.             ThisLevel.flCount+
  211.             ThisLevel.fuCount+
  212.             ThisLevel.puCount;
  213.  
  214.     for(i=0;i<TANKTYPES;i++)
  215.     {    ThisLevel.totalCount+=ThisLevel.tk[i].count;
  216.     }
  217. }
  218.  
  219. void    STLoadLevel()
  220. {
  221.     short    i;
  222.     int        doomzaps = ThisLevel.plSuperZaps;
  223.  
  224.     LoadLevel(ThisLevel.lvNext);
  225.     WriteVariable(kConstDEPTH, DEPTH);
  226.  
  227.     ThisLevel.lvNumber = ThisLevel.lvNext;
  228.     ThisLevel.lvField= EvalVariable(kVarLevelField);
  229.     ThisLevel.lvColor= EvalVariable(kVarLevelColor);
  230.     ThisLevel.lvBonus= EvalVariable(kVarLevelBonus);
  231.     ThisLevel.lvStBonus = EvalVariable(kVarLevelSTBonus);
  232.     ThisLevel.lvNext= EvalVariable(kVarLevelNext);
  233.  
  234.     ThisLevel.plMaxMove= EvalVariable(kVarPlayerMaxMove);
  235.     ThisLevel.plSuperZaps= EvalVariable(kVarPlayerSuperZaps);
  236.     
  237.     ThisLevel.shSpeed= EvalVariable(kVarShotSpeed);
  238.     ThisLevel.shPower= EvalVariable(kVarShotPower);
  239.     ThisLevel.shColor[0]= EvalVariable(kVarShotColor_0_);
  240.     ThisLevel.shColor[1]= EvalVariable(kVarShotColor_1_);
  241.     ThisLevel.shColor[2]= EvalVariable(kVarShotColor_2_);
  242.     ThisLevel.shColor[3]= EvalVariable(kVarShotColor_3_);
  243.     ThisLevel.shColor[4]= EvalVariable(kVarShotColor_4_);
  244.     
  245.     ThisLevel.flPoints= EvalVariable(kVarFlipperPoints);
  246.     ThisLevel.flCount= EvalVariable(kVarFlipperCount);
  247.     ThisLevel.flProb= EvalVariable(kVarFlipperProb);
  248.     ThisLevel.flSpeed= EvalVariable(kVarFlipperSpeed);
  249.     ThisLevel.flRot= EvalVariable(kVarFlipperRot);
  250.     ThisLevel.flColor= EvalVariable(kVarFlipperColor);
  251.  
  252.     ThisLevel.tk[0].points= EvalVariable(kVarTank_0_points);
  253.     ThisLevel.tk[0].count= EvalVariable(kVarTank_0_count);
  254.     ThisLevel.tk[0].prob= EvalVariable(kVarTank_0_prob);
  255.     ThisLevel.tk[0].speed= EvalVariable(kVarTank_0_speed);
  256.     ThisLevel.tk[0].color= EvalVariable(kVarTank_0_color);
  257.  
  258.     ThisLevel.tk[1].points= EvalVariable(kVarTank_1_points);
  259.     ThisLevel.tk[1].count= EvalVariable(kVarTank_1_count);
  260.     ThisLevel.tk[1].prob= EvalVariable(kVarTank_1_prob);
  261.     ThisLevel.tk[1].speed= EvalVariable(kVarTank_1_speed);
  262.     ThisLevel.tk[1].color= EvalVariable(kVarTank_1_color);
  263.  
  264.     ThisLevel.tk[2].points= EvalVariable(kVarTank_2_points);
  265.     ThisLevel.tk[2].count= EvalVariable(kVarTank_2_count);
  266.     ThisLevel.tk[2].prob= EvalVariable(kVarTank_2_prob);
  267.     ThisLevel.tk[2].speed= EvalVariable(kVarTank_2_speed);
  268.     ThisLevel.tk[2].color= EvalVariable(kVarTank_2_color);
  269.  
  270.     
  271.     ThisLevel.fuPoints= EvalVariable(kVarFusePoints);
  272.     ThisLevel.fuBullseye= EvalVariable(kVarFuseBullseye);
  273.     ThisLevel.fuCount= EvalVariable(kVarFuseCount);
  274.     ThisLevel.fuProb= EvalVariable(kVarFuseProb);
  275.     ThisLevel.fuWarpP= EvalVariable(kVarFuseWarpP);
  276.     ThisLevel.fuPlayerPlus= EvalVariable(kVarFusePlayerPlus);
  277.     ThisLevel.fuColor[0]= EvalVariable(kVarFuseColor_0_);
  278.     ThisLevel.fuColor[1]= EvalVariable(kVarFuseColor_1_);
  279.     ThisLevel.fuColor[2]= EvalVariable(kVarFuseColor_2_);
  280.     ThisLevel.fuColor[3]= EvalVariable(kVarFuseColor_3_);
  281.     ThisLevel.fuColor[4]= EvalVariable(kVarFuseColor_4_);
  282.     
  283.     ThisLevel.puPoints= EvalVariable(kVarPulsarPoints);
  284.     ThisLevel.puCount= EvalVariable(kVarPulsarCount);
  285.     ThisLevel.puProb= EvalVariable(kVarPulsarProb);
  286.     ThisLevel.puSpeed= EvalVariable(kVarPulsarSpeed);
  287.     ThisLevel.puRot= EvalVariable(kVarPulsarRot);
  288.     ThisLevel.puColor= EvalVariable(kVarPulsarColor);
  289.     ThisLevel.puTime= EvalVariable(kVarPulsarTime);
  290.     ThisLevel.puPulsDepth= EvalVariable(kVarPulsarPulsDepth);
  291.     
  292.     ThisLevel.spPoints= EvalVariable(kVarSpikerPoints);
  293.     ThisLevel.spProb= EvalVariable(kVarSpikerProb);
  294.     ThisLevel.spSpeed= EvalVariable(kVarSpikerSpeed);
  295.     ThisLevel.spStart= EvalVariable(kVarSpikerStart);
  296.     ThisLevel.spTop= EvalVariable(kVarSpikerTop);
  297.     ThisLevel.spPlasma= EvalVariable(kVarSpikerPlasma);
  298.     ThisLevel.spPlSpeed= EvalVariable(kVarSpikerPlSpeed);
  299.     ThisLevel.spPlPoints= EvalVariable(kVarSpikerPlPoints);
  300.     ThisLevel.spSpikePoints= EvalVariable(kVarSpikerSpikePoints);
  301.     ThisLevel.spColor[0]= EvalVariable(kVarSpikerColor_0_);
  302.     ThisLevel.spColor[1]= EvalVariable(kVarSpikerColor_1_);
  303.     ThisLevel.spColor[2]= EvalVariable(kVarSpikerColor_2_);
  304.     
  305.     ThisLevel.boredomCount= EvalVariable(kVarBoredomCount);
  306.     ThisLevel.boredProb= EvalVariable(kVarBoredProb);
  307.     ThisLevel.endTimer= EvalVariable(kVarEndTimer);
  308.     
  309.     ThisLevel.ShowSpikesMsg = EvalVariable(kVarShowSpikesMsg);
  310.     ThisLevel.Doomsday = EvalVariable(kVarDoomsday);
  311.     if(ThisLevel.Doomsday == 1){
  312.         ThisLevel.lvField =  (( (unsigned)(VARandom()) ) % 16)+ 1; 
  313.         if(Hero.Flags & SavedGameStartMask){
  314.             Hero.Flags &= (FLAGSMASK - SavedGameStartMask);
  315.             ThisLevel.plSuperZaps = doomzaps;
  316.         }
  317.     } 
  318.     
  319.  
  320.     ThisLevel.totalCount=
  321.             ThisLevel.flCount+
  322.             ThisLevel.fuCount+
  323.             ThisLevel.puCount;
  324.  
  325.     for(i=0;i<TANKTYPES;i++)
  326.     {    ThisLevel.totalCount+=ThisLevel.tk[i].count;
  327.     }
  328.  
  329. }
  330.  
  331. short    STLoadForSelect(int restartMode)
  332. {
  333.     LoadLevel(ThisLevel.lvNext);
  334.     WriteVariable(kConstDEPTH, DEPTH);
  335.  
  336.     ThisLevel.lvNumber = ThisLevel.lvNext;
  337.     ThisLevel.lvField= EvalVariable(kVarLevelField);
  338.     ThisLevel.lvColor= EvalVariable(kVarLevelColor);
  339.     ThisLevel.lvBonus= EvalVariable(kVarLevelBonus);
  340.     ThisLevel.lvStBonus = EvalVariable(kVarLevelSTBonus);
  341.     ThisLevel.lvNext= EvalVariable(kVarLevelNext);
  342.     
  343.     if(restartMode)
  344.         return EvalVariable(kVarAllowPracticeRestart);
  345.     else
  346.         return EvalVariable(kVarAllowArcadeRestart);
  347. }
  348.  
  349. void    DumpThisLevel()
  350. {
  351.     Handle    saved;
  352.     
  353.     saved = GetResource('LEVL', 999);
  354.     SetHandleSize(saved, sizeof(ThisLevel));
  355.     BlockMove(&ThisLevel, *saved, sizeof(ThisLevel));
  356.     ChangedResource(saved);
  357.     WriteResource(saved);
  358. }